VarArrayOf a MemProof

Otázka od: David Lebeda

3. 11. 2004 15:03

Ahoj,

kontroluji jednu svou aplikaci Memproofem a narazil jsem na dva problemy.

1) Pouzivam tabulku, v niz delam Locate pres vice sloupcu, neco jako
     Dataset.Locate('ID;NAZEV', VarArrayOf(i, s), []), kde i je typu integer a
s je typu string. Vse je funkcni, ale MemProof hlasi u kazdeho takoveho
VarArrayOf, ze tam vznika jakysi neuvolneny retezec (oleaut32.dll). Je to
problem Memproofu, nebo je neco spatne. Nanasel jsem zpusob, jak po pouziti
VarArrayOf uklidit.

2) Mam nekolik dynamickych poli recordu, ktere obsahuji polozky typu string
(ansistring). Pole je jako globalni promenna. Chtel jsem je pred skoncenim
programu po sobe uklidit, takze jsem na kazde postupne zavolal SetLength(pole,
0). Obvykle to funguje, nekdy ale (pomerne zridka) dostanu Invalid pointer
operation v _LStrClr. Vypada to, jako by Delphi nezvladly nekdy praci se
stringy. Ta dynamicka pole se po staru programu naalokuji a nactou se do nich
data. Pak uz se ta data jen ctou a do poli se nezapisuje. Memproof neodhalil
zadnou chybu. Netusite nekdo, co je spatne?

Diky

David Lebeda

Odpovedá: Tomas Bihary

3. 11. 2004 15:25

ad 2) pokud ty recordy maji jako clen polozky typu string zkusil
bych pred dealokaci priradit hodnotu stringu ''. Kdysi jsem mel
podobny problem a tohle pomohlo.

Ahoj
  Tomas Bihary

> -----Original Message-----
> From: delphi-l-owner@clexpert.cz
> [mailto:delphi-l-owner@clexpert.cz]On Behalf Of David Lebeda
> Sent: Wednesday, November 03, 2004 3:03 PM
> To: delphi-l@clexpert.cz
> Subject: VarArrayOf a MemProof
>
>
> Ahoj,
>
> kontroluji jednu svou aplikaci Memproofem a narazil jsem na dva problemy.
>
> 1) Pouzivam tabulku, v niz delam Locate pres vice sloupcu, neco jako
> Dataset.Locate('ID;NAZEV', VarArrayOf(i, s), []), kde i je
> typu integer a s je typu string. Vse je funkcni, ale MemProof
> hlasi u kazdeho takoveho VarArrayOf, ze tam vznika jakysi
> neuvolneny retezec (oleaut32.dll). Je to problem Memproofu, nebo
> je neco spatne. Nanasel jsem zpusob, jak po pouziti VarArrayOf uklidit.
>
> 2) Mam nekolik dynamickych poli recordu, ktere obsahuji polozky
> typu string (ansistring). Pole je jako globalni promenna. Chtel
> jsem je pred skoncenim programu po sobe uklidit, takze jsem na
> kazde postupne zavolal SetLength(pole, 0). Obvykle to funguje,
> nekdy ale (pomerne zridka) dostanu Invalid pointer operation v
> _LStrClr. Vypada to, jako by Delphi nezvladly nekdy praci se
> stringy. Ta dynamicka pole se po staru programu naalokuji a
> nactou se do nich data. Pak uz se ta data jen ctou a do poli se
> nezapisuje. Memproof neodhalil zadnou chybu. Netusite nekdo, co je spatne?
>
> Diky
>
> David Lebeda
>


Odpovedá: Karel Kral

4. 11. 2004 8:40

Spis bych na pole stringu zavolal Finalize. Podivej se do
TStringList.Clear, to funguje podobne.

Tomas Bihary napsal(a):
> ad 2) pokud ty recordy maji jako clen polozky typu string zkusil
> bych pred dealokaci priradit hodnotu stringu ''. Kdysi jsem mel
> podobny problem a tohle pomohlo.
>
> Ahoj
> Tomas Bihary
>
>
>>
>>2) Mam nekolik dynamickych poli recordu, ktere obsahuji polozky
>>typu string (ansistring). Pole je jako globalni promenna. Chtel
>>jsem je pred skoncenim programu po sobe uklidit, takze jsem na
>>kazde postupne zavolal SetLength(pole, 0). Obvykle to funguje,
>>nekdy ale (pomerne zridka) dostanu Invalid pointer operation v
>>_LStrClr. Vypada to, jako by Delphi nezvladly nekdy praci se
>>stringy. Ta dynamicka pole se po staru programu naalokuji a
>>nactou se do nich data. Pak uz se ta data jen ctou a do poli se
>>nezapisuje. Memproof neodhalil zadnou chybu. Netusite nekdo, co je spatne?
>>
>>Diky
>>
>>David Lebeda
>>
>


--
______________________________________________________
Karel Kral, vedouci odd. IT / IT manager
Purus, s.r.o., Cezavy 627, 664 56 Blucina, CZ
Tel: 547 235 000, 602 552 432, Fax: 547 231 203
E-Mail: mailto:kral@purus.cz, WWW: http://www.purus.cz
______________________________________________________